#define MIN(a,b) ((a > b) ? b : a)
#define MAX(a,b) ((a < b) ? b : a)
+#define EPSILON 1.0e-10
static long rgba_to_hsla (char *src,
char *dst,
max = MAX (red, MAX (green, blue));
min = MIN (red, MIN (green, blue));
- if (max == red)
+ if (max - red < EPSILON)
cpn_max = 0;
- else if (max == green)
+ else if (max - green < EPSILON)
cpn_max = 1;
else
cpn_max = 2;
lightness = (max + min) / 2.0;
- if (max == min)
+ if (max - min < EPSILON)
{
hue = saturation = 0;
}
#define MIN(a,b) (a > b) ? b : a;
#define MAX(a,b) (a < b) ? b : a;
+#define EPSILON 1.0e-10
static long rgba_to_hsva (char *src,
char *dst,
chroma = value - min;
- if (value == 0.0)
+ if (value < EPSILON)
saturation = 0.0;
else
saturation = chroma / value;
- if (saturation == 0.0)
+ if (saturation < EPSILON)
{
hue = 0.0;
}
else
{
- if (red == value)
+ if (fabs (red - value) < EPSILON)
{
hue = (green - blue) / chroma;
if (hue < 0.0)
hue += 6.0;
}
- else if (green == value)
+ else if (fabs (green - value) < EPSILON)
hue = 2.0 + (blue - red) / chroma;
else
hue = 4.0 + (red - green) / chroma;